#include <iostream>
#include <vector>
using namespace std;

#define forn(i,n) for(int i=0;i<n;i++)

int n;
int loads[1001];

/********************************************
  Invariante: en la posicion i arreglo loads,
guardo el peso que soporta la mejor torre de
altura i cajas.
  Cada vez que tengo una caja nueva, me fijo
para cada torre i si la puedo apilar y asi
generar una torre de altura i+1 mejor que la
que tenia antes.
  Osea, para la torre de altura i+1 me fijo 
si soporta más que la de altura i con la caja
nueva encima.
  Entonces la mejor torre de altura i+1 que
puedo tener es el maximo entre la que ya tenia
y la de altura i con la caja nueva encima (que
ahora puede soportar min(l,loads[k-1]-w) )
********************************************/

int main(){
	while( cin >> n && n!=0 ){
		loads[0]=3000*1000;
		int w,l;
		forn(i,n){
			cin >> w >> l;
			loads[i+1]=min(loads[i]-w,l);
			for(int k=i;k>0;k--){
				loads[k]=max(loads[k],min(l,loads[k-1]-w));
			}
		}
		int max=0; while(loads[max]>0) max++;
		cout << max-1 << endl;
	}
}
